package com.javawork.juc.two;

/**
 * 在定义接口方法时不能使用synchronized关键字。
 * 构造方法不能使用synchronized关键字，但可以使用synchronized代码块来进行同步。
 * 修饰一个静态的方法
 * Synchronized也可修饰一个静态方法，用法如下：
 *
 * public synchronized static void method() {
 *
 * }
 * 我们知道静态方法是属于类的而不属于对象的。同样的，synchronized修饰的静态方法锁定的是这个类的所有对象。
 *
 * @author zhangxiaolu
 * @date 2023-02-06 23:25
 */
public class SynchronizedTestDemo3 {
    public static void main(String[] args) {
        System.out.println("使用关键字静态synchronized");
//        SyncThread3 syncThread = new SyncThread3();
//        Thread thread1 = new Thread(syncThread, "SyncThread1");
//        Thread thread2 = new Thread(syncThread, "SyncThread2");

        Thread thread1 = new Thread( new SyncThread3(), "SyncThread1");
        Thread thread2 = new Thread( new SyncThread3(), "SyncThread2");
        thread1.start();
        thread2.start();
    }
}

class SyncThread3 implements Runnable {
    private static int count;

    public SyncThread3() {
        count = 0;
    }

    public synchronized static void method() {
        for (int i = 0; i < 5; i++) {
            try {
                System.out.println(Thread.currentThread().getName() + ":" + (count++));
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public synchronized void run() {
        method();
    }
}